/*
 *  Copyright 2024 Collate.
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *  http://www.apache.org/licenses/LICENSE-2.0
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

import { useMemo } from 'react';
import { Domain } from '../../../../../generated/entity/domains/domain';
import { DomainTypeChip } from '../../../../DomainListing/components/DomainTypeChip';
import { CellRenderer } from '../../shared/types';

interface UseDomainRenderersConfig {
  includeDomainTypeChip?: boolean;
  customRenderers?: CellRenderer<Domain>;
}

export const useDomainRenderers = (config: UseDomainRenderersConfig = {}) => {
  const { includeDomainTypeChip = true, customRenderers = {} } = config;

  const baseRenderers: CellRenderer<Domain> = useMemo(() => {
    const renderers: CellRenderer<Domain> = {};

    if (includeDomainTypeChip) {
      renderers.domainTypeChip = (domain: Domain) => (
        <DomainTypeChip domainType={domain.domainType} />
      );
    }

    return renderers;
  }, [includeDomainTypeChip]);

  const renderers = useMemo(() => {
    return { ...baseRenderers, ...customRenderers };
  }, [baseRenderers, customRenderers]);

  return {
    renderers,
    baseRenderers,
  };
};
